package com.sg.dto.biz.bff.common;

import com.wicket.okrbff.common.annotations.TreeType;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;
import java.util.Objects;


/**
 * @desc BffTargetObjDto
 * @使用场景
 */
@Data
public class BffTargetObjDto implements Serializable {

    /**
     * 指标模板ID
     */
    @ApiModelProperty("指标模板ID")
    private String objectiveTemplateId;

    /**
     * 指标模板名称
     */
    @ApiModelProperty("指标模板名称")
    private String objectiveTemplateName;

    /**
     * 关联末级目标分类ID
     */
    @ApiModelProperty("关联末级目标分类ID")
    private String correlationLastTargetCatId;

    /**
     * 归属父级指标ID
     */
    @ApiModelProperty("归属父级指标ID")
    private String parentObjectiveId;

    /**
     * 指标ID
     */
    @ApiModelProperty("指标ID")
    private String objectiveId;

    /**
     * 指标标识
     */
    @ApiModelProperty("指标标识")
    private String objectiveCode;

    /**
     * 指标名称
     */
    @ApiModelProperty("指标名称")
    private String objectiveName;

    /**
     * 指标简称
     */
    @ApiModelProperty("指标简称")
    private String objectiveShortName;

    /**
     * 冗余指标业务类型 NUMBER_GROWTH:数量增长型 NUMBER_DECLINE:数量降幅型 PERCENTAGE_GROWTH:百分比增长型 PERCENTAGE_DECLINE:百分比降幅型 PROGRESS:进度型 RATIO_GROWTH:比率增长型 RATIO_DECLINE:比率降幅型 SUBJECTIVE_QUALITATIVE:主观定性
     */
    @ApiModelProperty("冗余指标业务类型")
    private String targetValueType;

    /**
     * 冗余单位 INDIVIDUAL:个 DOOR:门 TERM:项 PIECE:篇 YUAN:元 FEN:分 WAN_YUAN:万元 PERCENT:百分率
     */
    @ApiModelProperty("冗余单位")
    private String unit;

    /**
     * 冗余数字单位
     */
    @ApiModelProperty("冗余数字单位")
    private Double digitalUnit;

    /**
     * 冗余是否左侧比例型 TRUE:是 FALSE:否
     */
    @ApiModelProperty("冗余是否左侧比例型")
    private String isLeft;

    /**
     * 层级
     */
    @ApiModelProperty("层级")
    private Long levelNumber;

    /**
     * 周期模式类型编码 FATHER_SON_CYCLE:父子周期 SINGLE_CYCLE:单周期 IRREGULAR_CYCLE:不规则周期
     */
    @ApiModelProperty("周期模式类型编码")
    private String periodicModeTypeCode;

    /**
     * 被评对象目标周期ID
     */
    @ApiModelProperty("被评对象目标周期ID")
    private String evaObjTargetCycleId;

    /**
     * 周期名称
     */
    @ApiModelProperty("周期名称")
    private String cycleStandardName;

    /**
     * 周期类型实例简称
     */
    @ApiModelProperty("周期类型实例简称")
    private String cycleNumberShortName;

    /**
     * 权重
     */
    @ApiModelProperty("权重")
    private Double weightValue;

    /**
     * 权重分值
     */
    @ApiModelProperty("权重分值")
    private Double weightScore;

    /**
     * 诊断值
     */
    @ApiModelProperty("诊断值")
    private Double targetDiagnosticValue;

    /**
     * 虚拟组织下部门ID
     */
    @ApiModelProperty("虚拟组织下部门ID")
    private String deptId;

    /**
     * 部门简称
     */
    @ApiModelProperty("部门简称")
    private String deptShortName;

    /**
     * 组织内部门身份名称
     */
    @ApiModelProperty("组织内部门身份名称")
    private String virtualOrgDeptStatus;

    /**
     * 虚拟组织成员就职记录ID
     */
    @ApiModelProperty("虚拟组织成员就职记录ID")
    private String virtualOrgInductionRecordId;

    /**
     * 用户昵称
     */
    @ApiModelProperty("用户昵称")
    private String nickName;

    /**
     * 真实姓名
     */
    @ApiModelProperty("真实姓名")
    private String idCardName;

    /**
     * 组内职务名称
     */
    @ApiModelProperty("组内职务名称")
    private String virtualOrganizationPosition;
    /**
     * 冗余一级目标分类ID
     */
    @ApiModelProperty("冗余一级目标分类ID")
    private String rootTargetCategoryId;

    /**
     * 冗余指标模板类型 QUALITATIVE:定性 RATION:定量
     */
    @ApiModelProperty("冗余指标模板类型")
    private String objectiveType;

    /**
     * 系统对接计算类型 CALCULATE:计算实际值 SCORE_AFTER_CALCULATE:计算实际值得分
     */
    @ApiModelProperty("系统对接计算类型")
    private String systemDocking;

    /**
     * 是否引用指标 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否引用指标")
    private String isReference;

    /**
     * 排序
     */
    @ApiModelProperty("排序")
    private Long orderNumber;

    /**
     * 批次下更新状态 NEW:本次新增 UNCHANGED:正常未变 REVISION:本次修订 ARCHIVE:本次存档
     */
    @ApiModelProperty("批次下更新状态")
    private String updateStatus;

    /**
     * 主体生命周期 CURRENTLY_VALID:当前有效 EDITING:正在编辑 ARCHIVING:历史存档
     */
    @ApiModelProperty("主体生命周期")
    private String subjectLifeCycle;
    /**
     * 负责人就职记录ID
     */
    @ApiModelProperty("负责人就职记录ID")
    private String principalInductionRecordId;

    /**
     * 负责人个人账号ID
     */
    @ApiModelProperty("负责人个人账号ID")
    private String principalUserId;

    /**
     * 负责人真实姓名
     */
    @ApiModelProperty("负责人真实姓名")
    private String principalIdCardName;

    /**
     * 负责人昵称
     */
    @ApiModelProperty("负责人昵称")
    private String principalNickName;

    /**
     * 负责人组内职务名称
     */
    @ApiModelProperty("负责人组内职务名称")
    private String principalVirtualOrganizationPosition;

    /**
     * 主管就职记录ID
     */
    @ApiModelProperty("主管就职记录ID")
    private String directorInductionRecordId;

    /**
     * 主管个人账号ID
     */
    @ApiModelProperty("主管个人账号ID")
    private String directorUserId;

    /**
     * 主管真实姓名
     */
    @ApiModelProperty("主管真实姓名")
    private String directorIdCardName;

    /**
     * 主管昵称
     */
    @ApiModelProperty("主管昵称")
    private String directorNickName;

    /**
     * 主管组内职务名称
     */
    @ApiModelProperty("主管组内职务名称")
    private String directorVirtualOrganizationPosition;
    /**
     * 是否向下分工 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否向下分工")
    private String createLowerIndicator;
    /**
     * 负责人虚拟组织成员ID
     */
    @ApiModelProperty("负责人虚拟组织成员ID")
    private String principalVirtualOrgMemberId;

    /**
     * 主管虚拟组织成员ID
     */
    @ApiModelProperty("主管虚拟组织成员ID")
    private String directorVirtualOrgMemberId;
    /**
     * 是否已完成 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否已完成")
    private String isComplete;
    /**
     * 存档类型 NOT_ARCHIVE:未归档 TOBE_ARCHIVING:想归档 ARCHIVED:已归档
     */
    @ApiModelProperty("存档类型")
    private String archivngType;
    /**
     * 目标值
     */
    @ApiModelProperty("目标值")
    private Double targetValue;
    /**
     * 目标周期简称
     */
    @ApiModelProperty("目标周期简称")
    private String cyclelAlias;
    /**
     * 责任主体类型 PERSONAL:个人 DEPT:部门
     */
    @ApiModelProperty("责任主体类型")
    private String respBodyType;

    /**
     * 责任人头像
     */
    @ApiModelProperty("责任人头像")
    private String principalUserFace;
    /**
     * 是否开启自定义汇报 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否开启自定义汇报")
    private String isOpenCustomReport;
    /**
     * 实时得分
     */
    @ApiModelProperty("实时得分")
    private String realTimeScore;

    /**
     * 实际值
     */
    @ApiModelProperty("实际值")
    private String actualValue;

    /**
     * 达成度
     */
    @ApiModelProperty("达成度")
    private Long reach;

    /**
     * 归属父级目标分类ID
     */
    @TreeType("fid")
    @ApiModelProperty("归属父级目标分类ID")
    private String parentTargetCategoryId;
    /**
     * 分管领导就职记录ID
     */
    @ApiModelProperty("分管领导就职记录ID")
    private String deptLeaderInductionRecordId;

    /**
     * 分管领导组内名称
     */
    @ApiModelProperty("分管领导组内名称")
    private String deptLeaderVirtualOrganizationPosition;

    /**
     * 分管领导姓名
     */
    @ApiModelProperty("分管领导姓名")
    private String deptLeaderIdCardName;

    /**
     * 分管领导昵称
     */
    @ApiModelProperty("分管领导昵称")
    private String deptLeaderNickName;
    /**
     * 冗余评价模板ID
     */
    @ApiModelProperty("冗余评价模板ID")
    private String evaluationTemplateId;

    /**
     * 个人排序
     */
    @ApiModelProperty("个人排序")
    private Long personalOrderNumber;

    /**
     * 操作时间
     */
    @ApiModelProperty("操作时间")
    private Date operateTime;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private Date createTime;
    /**
     * 是否开启预算 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否开启预算")
    private String isUseBudget;
    /**
     * 数据点类型 FROM_LAST_BUDGET:预算较上次变化 FROM_LAST_RATIO_BUDGET:预算较上次增降幅 FUNDS_USE_PROGRESS:资金使用进度 BUDGET_USABLE:预算账户可用金额 BUDGET_FROZEN:预算账户冻结金额 CUMULATIVE_BUDGET:预算账户累计结算金额 BUDGET_TOTAL:预算账户总金额 FUNDS_RECEIVED_USABLE:实体账户可用金额 FUNDS_RECEIVED_FROZEN:实体账户冻结金额 FUNDS_RECEIVED_TOTAL:实体账户累计到账总金额 ACTUAL_VALUE:实际值 COUNT_ACTUAL_VALUE:实际参照值 CHANGE_FROM_LAST_TARGET:实际值增降量 COUNT_CHANGE_FROM_LAST_TARGET:计算较上次目标变化值 FROM_LAST_TARGET_LIFT_RATIO:实际值增降幅 COUNT_FROM_LAST_TARGET_LIFT_RATIO:计算较上次目标增降幅 PROGRESS_VALUE:进度值 COUNT_PROGRESS_VALUE:进度参照值 COST_EXPENDITURE_INC_DEC_RATE:费用支出增降幅 FROM_LAST_PROGRESS_VALUE:进度值增降量 COUNT_FROM_LAST_PROGRESS_VALUE:计算进度较上次变化值 PROGRESS_FROM_LAST_RATIO:进度值增降幅 COUNT_PROGRESS_FROM_LAST_RATIO:计算进度较上次增降幅 REACH:达成度 COUNT_REACH:计算达成度 FROM_LAST_REACH:达成度增降量 COUNT_FROM_LAST_REACH:计算达成度较上次变化值 ACTUAL_FROM_LAST_TIME_RATIO:达成度增降福 COUNT_FROM_LAST_REACH_RATIO:计算达成度较上次增降福 FUNDS_RECEIVED:到账金额 FUNDS_RECEIVED_FROM_LAST:到账较上次变化值 CUMULATIVE_FUNDS_RECEIVED:实体账户累计使用金额 FUNDS_AUTO_RECEIVED:资金自动到账金额 FUNDS_EXPEND:资金支出金额 FUNDS_EXPEND_FROM_LAST:费用支出增加量 CUMULATIVE_FUNDS_EXPEND:累计支出资金 BUDGET_AMOUNT:预算账户账户余额 FUNDS_RECEIVED_BALANCE:实体账户账户余额 SUBJECTIVE_MARK:主观评分 SUBJECTIVE_SCORE:主观得分 OBJECTIVE_SCORE:客观得分 PROCESS_SCORE:过程得分 FROM_LAST_REPORT_SCORE:汇报得分增降量 RESULT_SCORE:结果得分 FROM_LAST_RATIO_REPORT_SCORE:汇报得分增降幅 REAL_TIME_SCORE:实时得分 FROM_LAST_ACTUAL_SCORE:实际得分增降量 GIVE_LIKES:点赞数 FROM_LAST_RATIO_ACTUAL_SCORE:实际得分增降幅 DELAY_SURPLUS_LENGTH:延后或剩余天数 SUB_REPORT_AVG_SCORE:子周期汇报平均分 LAST_REPORT_AVG_SCORE:末级周期汇报平均分 RECENTLY_REPORT_AVG_SCORE:最近周期汇报平均分 PROCESS_REPORT_MID_SCORE:过程汇报中期得分 SUB_PROCESS_REPORT_SCORE:子周期过程汇报得分 MID_PROCESS_REPORT_SCORE:中期过程汇报得分 FATHER_PROCESS_REPORT_SCORE:父周期过程汇报得分 CURRENT_SUBJECTIVE_SCORE:当前主观得分 PROCESS_SUBJECTIVE_SCORE:过程主观得分 LOCAL_LEVEL_SCORE:本级得分 LOWER_LEVEL_SCORE:下级得分 ACTUAL_SCORE:实际得分 ROLE_SUBJECTIVE_SCORE:角色主观得分 SUB_ACTUAL_SCORE:子周期实际得分 MID_ACTUAL_SCORE:中期实际得分 FATHER_ACTUAL_SCORE:父周期实际得分 LOW_KR_ACTUAL_SCORE:下级KR实际得分 SUBJECTIVE_AND_OBJECTIVE_SCORE:主客观得分 BUDGET:预算金额 FUNDS_RECEIVED_FROM_LAST_RATIO:到账较上次增降幅 BUDGET_DISBURSE:预算支出金额 FATHER_CYCLE_REPORT_SCORE:父周期汇报得分 MID_CYCLE_REPORT_SCORE:中期汇报得分 LOWER_PROCESS_CYCLE_REPORT_SCORE:下级过程周期汇报得分 SUB_CYCLE_REPORT_SCORE:子周期汇报得分 LOWER_WORK_CYCLE_REPORT_SCORE:下级工作周期实际得分 LAST_CYCLE_REPORT_SCORE:末级周期汇报得分 NOT_LAST_PROCESS_CYCLE_REPORT_SCORE:中间周期汇报得分 SOURCE_BUDGET_FUNDS_PROP:预算资金来源占比 TARGET_CYCLE_BUDGET_FUNDS_PROP:目标周期预算占比 BUDGET_SOURCE_OF_FUNDS:预算资金来源设置 CYCLE_BUDGET_AMOUNT:目标周期预算金额 REPORT_SCORE:目标得分 PROCESS_REPORT_SCORE:过程汇报得分 REPORT_AVG_SCORE:汇报平均分 TOTAL_NUMBER_OF_TASKS:总任务数 AVERAGE_TASK_PROGRESS:任务平均进度 NUMBER_OF_OVERDUE_TASKS:逾期任务数 NUMBER_OF_ONGOING_TASKS:进行中任务数 NUMBER_OF_COMPLETED_TASKS:已完成任务数 NUMBER_OF_TOBESIGN_TASKS:待签收任务数 NUMBER_OF_NOT_AT_THE_TASKS:未开始任务数 NUMBER_OF_FAILED_TASKS:已失败任务数 NUMBER_OF_UNREPORTED_TASKS:待汇报任务数 NUMBER_OF_EVA_TASKS:评价中任务数 NUMBER_OF_AUDIT_TASKS:审核中任务数 NUMBER_OF_SUCCESS_TASKS:已成功任务数 NUMBER_OF_OBJECTIVE:指标数 NUMBER_OF_TOBEFILL_TASKS:待填报任务数 NUMBER_OF_TOBEEVA_TASKS:待评价任务数 TOTAL_NUMBER_OF_QUESTIONS:问题总数 AVERAGE_PROBLEM_SOLVING_TIME:问题平均解决时长 NUMBER_OF_UNRESOLVED_ISSUES:待解决问题数 NUMBER_OF_TIMEOUT_ISSUES:已超时问题数 NUMBER_OF_SOLVED_PROBLEMS:已解决问题数 NUMBER_OF_SUSPENDED_PROBLEMS:已挂起问题数 NUMBER_OF_REJECTED_PROBLEMS:已拒绝问题数 NUMBER_OF_SHELVE_PROBLEMS:暂搁置问题数 NUMBER_OF_CLOSED_PROBLEMS:已关闭问题数 FUND_USAGE_RATE:资金使用率
     */
    @ApiModelProperty("数据点类型")
    private String dataType;

    /**
     * 数据值结果
     */
    @ApiModelProperty("数据值结果")
    private Double dataResult;

    /**
     * 真实头像
     */
    @ApiModelProperty("真实头像")
    private String userFace;
    /**
     * 指标编号
     */
    @ApiModelProperty("指标编号")
    private String objectiveNumber;
    /**
     * 目标计划开始时间
     */
    @ApiModelProperty("目标计划开始时间")
    private Date cycleStartTime;

    /**
     * 目标计划结束时间
     */
    @ApiModelProperty("目标计划结束时间")
    private Date cycleEndTime;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        if (!super.equals(o)) return false;
        BffTargetObjDto that = (BffTargetObjDto) o;
        return objectiveTemplateId == that.objectiveTemplateId && objectiveTemplateName == that.objectiveTemplateName && correlationLastTargetCatId == that.correlationLastTargetCatId && parentObjectiveId == that.parentObjectiveId && objectiveId == that.objectiveId && objectiveCode == that.objectiveCode && objectiveName == that.objectiveName && objectiveShortName == that.objectiveShortName && targetValueType == that.targetValueType && unit == that.unit && digitalUnit == that.digitalUnit && isLeft == that.isLeft && levelNumber == that.levelNumber && periodicModeTypeCode == that.periodicModeTypeCode && evaObjTargetCycleId == that.evaObjTargetCycleId && cycleStandardName == that.cycleStandardName && cycleNumberShortName == that.cycleNumberShortName && weightValue == that.weightValue && weightScore == that.weightScore && targetDiagnosticValue == that.targetDiagnosticValue && deptId == that.deptId && deptShortName == that.deptShortName && virtualOrgDeptStatus == that.virtualOrgDeptStatus && virtualOrgInductionRecordId == that.virtualOrgInductionRecordId && nickName == that.nickName && idCardName == that.idCardName && virtualOrganizationPosition == that.virtualOrganizationPosition && rootTargetCategoryId == that.rootTargetCategoryId && objectiveType == that.objectiveType && systemDocking == that.systemDocking && isReference == that.isReference && orderNumber == that.orderNumber && updateStatus == that.updateStatus && subjectLifeCycle == that.subjectLifeCycle && principalInductionRecordId == that.principalInductionRecordId && principalUserId == that.principalUserId && principalIdCardName == that.principalIdCardName && principalNickName == that.principalNickName && principalVirtualOrganizationPosition == that.principalVirtualOrganizationPosition && directorInductionRecordId == that.directorInductionRecordId && directorUserId == that.directorUserId && directorIdCardName == that.directorIdCardName && directorNickName == that.directorNickName && directorVirtualOrganizationPosition == that.directorVirtualOrganizationPosition && createLowerIndicator == that.createLowerIndicator && principalVirtualOrgMemberId == that.principalVirtualOrgMemberId && directorVirtualOrgMemberId == that.directorVirtualOrgMemberId && isComplete == that.isComplete && archivngType == that.archivngType && targetValue == that.targetValue && cyclelAlias == that.cyclelAlias && respBodyType == that.respBodyType && principalUserFace == that.principalUserFace && isOpenCustomReport == that.isOpenCustomReport && realTimeScore == that.realTimeScore && actualValue == that.actualValue && reach == that.reach && parentTargetCategoryId == that.parentTargetCategoryId && deptLeaderInductionRecordId == that.deptLeaderInductionRecordId && deptLeaderVirtualOrganizationPosition == that.deptLeaderVirtualOrganizationPosition && deptLeaderIdCardName == that.deptLeaderIdCardName && deptLeaderNickName == that.deptLeaderNickName && evaluationTemplateId == that.evaluationTemplateId && personalOrderNumber == that.personalOrderNumber && operateTime == that.operateTime && createTime == that.createTime && isUseBudget == that.isUseBudget && dataType == that.dataType && dataResult == that.dataResult && userFace == that.userFace && objectiveNumber == that.objectiveNumber && cycleStartTime == that.cycleStartTime && cycleEndTime == that.cycleEndTime;
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), objectiveTemplateId, objectiveTemplateName, correlationLastTargetCatId, parentObjectiveId, objectiveId, objectiveCode, objectiveName, objectiveShortName, targetValueType, unit, digitalUnit, isLeft, levelNumber, periodicModeTypeCode, evaObjTargetCycleId, cycleStandardName, cycleNumberShortName, weightValue, weightScore, targetDiagnosticValue, deptId, deptShortName, virtualOrgDeptStatus, virtualOrgInductionRecordId, nickName, idCardName, virtualOrganizationPosition, rootTargetCategoryId, objectiveType, systemDocking, isReference, orderNumber, updateStatus, subjectLifeCycle, principalInductionRecordId, principalUserId, principalIdCardName, principalNickName, principalVirtualOrganizationPosition, directorInductionRecordId, directorUserId, directorIdCardName, directorNickName, directorVirtualOrganizationPosition, createLowerIndicator, principalVirtualOrgMemberId, directorVirtualOrgMemberId, isComplete, archivngType, targetValue, cyclelAlias, respBodyType, principalUserFace, isOpenCustomReport, realTimeScore, actualValue, reach, parentTargetCategoryId, deptLeaderInductionRecordId, deptLeaderVirtualOrganizationPosition, deptLeaderIdCardName, deptLeaderNickName, evaluationTemplateId, personalOrderNumber, operateTime, createTime, isUseBudget, dataType, dataResult, userFace, objectiveNumber, cycleStartTime, cycleEndTime);
    }


}
   